pmap
, future
, এবং promise
এর ব্যবহারক্লোজার (Clojure) একটি ফাংশনাল প্রোগ্রামিং ভাষা যা মাল্টি-থ্রেডিং এবং প্যারালাল প্রোগ্রামিংকে সমর্থন করে। ক্লোজারে parallelism বা প্যারালালিজম (একই সময়ে একাধিক কাজ চালানো) করার জন্য pmap
, future
, এবং promise
এর মতো টুলস ব্যবহার করা হয়। এগুলো মাল্টি-থ্রেডেড কার্যক্রমকে সহজে পরিচালনা করতে সহায়ক, এবং নির্দিষ্ট কাজের কার্যকারিতা এবং প্রোডাক্টিভিটি বাড়াতে সহায়ক।
এগুলো আসলে Concurrency (একাধিক কাজ একে অপরের সাথে সময়ের মধ্যে সম্পন্ন হওয়া) এবং Parallelism (একাধিক কাজ একই সময়ে সম্পন্ন হওয়া) এর মধ্যে পার্থক্যকে মান্য করে।
pmap
(Parallel Map)pmap
হল ক্লোজারে একটি প্যারালাল ম্যাপিং ফাংশন যা প্রতিটি কলব্যাক ফাংশনকে পৃথক থ্রেডে প্রসেস করার মাধ্যমে মাল্টি-থ্রেডেডভাবে কাজ করে। এটি মূলত একটি পারALLEL মেপিং ফাংশন, যা বড় ডেটাসেটের উপর অপারেশন কার্যকরী করতে ব্যবহার করা হয়।
pmap
ব্যবহার(defn slow-function [n]
(Thread/sleep 1000)
(* n n))
; pmap ব্যবহার করে ফাংশনকে প্যারালালভাবে প্রয়োগ করা
(def results (pmap slow-function [1 2 3 4 5]))
(println results) ; আউটপুট: (1 4 9 16 25)
এখানে, slow-function
প্রতি সংখ্যায় ১ সেকেন্ড সময় নেয়, কিন্তু pmap
ব্যবহার করে এটি সকল ইনপুটের উপর একযোগে কাজ করে এবং একাধিক থ্রেডে প্রসেস হয়, তাই এটি দ্রুত শেষ হয়।
pmap
ব্যবহারের সুবিধা হলো এটি একাধিক উপাদানকে একযোগে প্যারালাল প্রসেস করতে পারে, বিশেষত যখন কাজের এক্সপেনসিভ বা সময়সাপেক্ষ।future
(অ্যাসিনক্রোনাস কম্পিউটেশন)future
ফাংশনটি ক্লোজারে একটি অ্যাসিনক্রোনাস কম্পিউটেশন সম্পাদন করার জন্য ব্যবহৃত হয়। এটি একটি কাজকে ব্যাকগ্রাউন্ডে রান করার জন্য একটি পৃথক থ্রেডে সরবরাহ করে, এবং যখন কাজটি শেষ হয় তখন তা একটি ফলাফল প্রদান করে। future
মূলত এ্যাসিনক্রোনাস কাজের জন্য ব্যবহৃত হয়, যেখানে আপনি কাজটি সম্পন্ন হওয়ার পরেই ফলাফল চান, তবে মূল থ্রেড চলতে থাকে।
future
ব্যবহার(defn long-running-task [n]
(Thread/sleep 2000)
(* n n))
(def future-result (future (long-running-task 10)))
(println "Task is running asynchronously...")
(println "Result: " @future-result) ; আউটপুট: 100 (2 সেকেন্ড পর)
future
ফাংশনটি একটি ব্যাকগ্রাউন্ড থ্রেডে কাজটি রান করে এবং আপনি @
ব্যবহার করে ফলাফল পাবেন যখন এটি সম্পন্ন হবে।promise
(ফিউচার রেজাল্টের জন্য অপেক্ষা)promise
হল একটি প্যারালাল প্রোগ্রামিং কনসেপ্ট যা একটি মান রিটার্ন করার জন্য অপেক্ষা করতে ব্যবহৃত হয়। এটি একটি বিশেষ ধরনের ভেরিয়েবল বা স্টোরেজ যা অ্যাসিনক্রোনাস ফাংশন বা থ্রেডের মাধ্যমে মান রিটার্ন করার সময় ব্যবহৃত হয়। একটি promise
হল একটি প্লেসহোল্ডার যা অন্য থ্রেড বা প্রসেসের মাধ্যমে মানের উপলব্ধির জন্য অপেক্ষা করে।
promise
ব্যবহার(defn long-task [n p]
(Thread/sleep 3000)
(deliver p (* n n))) ; `deliver` promise পূর্ণ করে
(def my-promise (promise))
; promise এর জন্য অপেক্ষা করা
(future (long-task 10 my-promise))
(println "Waiting for result...")
(println "Result: " @my-promise) ; আউটপুট: 100 (3 সেকেন্ড পর)
long-task
একটি অ্যাসিনক্রোনাস ফাংশন যা promise
এ একটি মান প্রদান করে। মূল থ্রেড @my-promise
ব্যবহার করে সেই মানের জন্য অপেক্ষা করে এবং এটি পাওয়ার পর ফলাফল প্রিন্ট করে।promise
থ্রেডগুলির মধ্যে ডেটা পাস করার জন্য এবং অ্যাসিনক্রোনাস ফাংশনের সাথে সিঙ্ক্রোনাইজ করার জন্য ব্যবহৃত হয়।pmap
, future
, এবং promise
এর তুলনাফাংশন | উদ্দেশ্য | ব্যবহার |
---|---|---|
pmap | মাল্টিপল উপাদানের উপর প্যারালাল অপারেশন (যেমন map ফাংশনের মতো) | একটি কলব্যাক ফাংশন একাধিক থ্রেডে চালানোর জন্য |
future | অ্যাসিনক্রোনাস কাজ চালানো এবং ফলাফল পরে পাওয়া | ব্যাকগ্রাউন্ড থ্রেডে দীর্ঘ চলমান কাজ সম্পন্ন করার জন্য |
promise | অ্যাসিনক্রোনাস মানের জন্য প্লেসহোল্ডার, যা রেজাল্ট পাওয়ার জন্য অপেক্ষা করে | এক থ্রেডে মান প্রদান এবং অন্য থ্রেডে সেই মানের জন্য অপেক্ষা করা |
এই তিনটি ফাংশনই ক্লোজারে প্যারালাল প্রোগ্রামিং এবং অ্যাসিনক্রোনাস কার্যক্রমকে সহজে পরিচালনা করার জন্য ব্যবহৃত হয়। pmap
প্যারালাল প্রসেসিংয়ের জন্য, future
অ্যাসিনক্রোনাস কম্পিউটেশনের জন্য এবং promise
ফিউচার রেজাল্টের জন্য অপেক্ষা করার জন্য উপকারী।
common.read_more